package com.aiju.support.file;

import java.io.File;

/**
 * @version V1.0
 * @author: 佐为
 * @date: 2016-09-18 10:48
 * @Description 访问文件树
 */
public class FileTree {

    /**
     * 遍历文件树
     * @param directory 访问文件的根目录
     * @param visitor 访问者
     */
    public static void walkFileTree(File directory, FileTreeVisitor visitor) {
        visitor.preVisitDirectory(directory);
        File[] files = directory.listFiles();
        if (files != null) {
            for (File file: files) {
                if (file.isDirectory()) {
                    walkFileTree(file, visitor);
                } else {
                    visitor.visitFile(file);
                }
            }
        }
        visitor.postVisitDirectory(directory);
    }

    /**
     * 只删除子目录下文件
     * @param directory 要删除的目录文件
     * @return boolean 是否删除成功
     */
    public static boolean deleteContents(File directory) {
        File[] files = directory.listFiles();
        boolean success = true;
        if (files != null) {
            for (File file : files) {
                success &= deleteRecursively(file);
            }
        }
        return success;
    }

    /**
     * 删除文件和子目录文件
     * @param file 要删除的文件
     * @return boolean 是否删除成功
     */
    public static boolean deleteRecursively(File file) {
        if (file.isDirectory()) {
            deleteContents(file);
        }
        return file.delete();
    }

}
